VisualStudio&QT 动态库、静态库以及QT Plugin插件创建和加载方法 |
您所在的位置:网站首页 › qt生成动态库 一个工程只能生成一个吗 › VisualStudio&QT 动态库、静态库以及QT Plugin插件创建和加载方法 |
一、动态库创建以及静态加载方法 1. 创建动态库 (1)编写好.h和.cpp文件 (2)项目->属性->配置属性->常规->配置类型(动态库.dll)
2. 动态库静态加载方法 (1)包含编写好的.h文件 (2)pragma comment(lib, "../../../../")后面问lib库所在的路径 #pragma comment(lib, "../x64/Debug/dynamicLibrary.lib")
二、动态库创建以及动态加载方法 1. 创建动态库 同上述 2. 动态库动态加载方法 (1)添加主程序入口函数 注意: .lib可随意放置,使用时,指定正确的路径即可 放置.dll文件在和.exe文件同一目录下 1)使用Windows库函数加载dll 2)LoadLibraryA 加载dll 3)GetProcAddress 获取函数地址 4)FreeLibrary 释放句柄 代码示意main函数 #include"add.h" #include #include #include //#pragma comment(lib, "../x64/Debug/dynamicLibrary.lib") // 动态库静态加载 //动态库动态加载 int main() { HINSTANCE h = LoadLibraryA("dynamicLibrary.dll");//第一步 typedef int(*FunPtr)(int a, int b);//定义函数指针 if (h == NULL) { FreeLibrary(h); printf("load lib error\n"); } else { FunPtr funPtr = (FunPtr)GetProcAddress(h, "add");//第二步 if (funPtr != NULL) { int result = funPtr(8, 3); printf("8 + 3 =%d\n", result); } else { printf("get process error\n"); printf("%d", GetLastError()); } FreeLibrary(h);//第三步 } system("pause"); }================================下面介绍QT中plugin插件的创建以及使用===============================
三、静态库创建以及加载方法 1. 创建静态库 1)编写好.h和.cpp文件 (2)项目->属性->配置属性->常规->配置类型(静态库.lib) 2. 静态库加载方法 (1)包含编写好的.h文件 (2)pragma comment(lib, "../../../../")后面问lib库所在的路径
=====================以下为QT中动态库以及静态库加载方法==================== 一、QT动态库创建 1. projects->library->共享库,建立如下所示的项目 2. 头文件 //testdynamiclib.h #ifndef TESTDYNAMICLIB_H #define TESTDYNAMICLIB_H #include "testdynamiclib_global.h" class TESTDYNAMICLIBSHARED_EXPORT TestDynamicLib { public: TestDynamicLib(); void MyDynamicLib(); }; #endif // TESTDYNAMICLIB_H3. .cpp文件 #include "testdynamiclib.h" TestDynamicLib::TestDynamicLib() { } void TestDynamicLib::MyDynamicLib() { qDebug("test dynamic lib !"); }
二、QT静态库创建 1. projects->library->静态链接库 2. 头文件 #ifndef TESTSTATICLIB_H #define TESTSTATICLIB_H #include class TestStaticLib { public: TestStaticLib(); void TestMyStaticLib(); }; #endif // TESTSTATICLIB_H3. cpp文件 #include "teststaticlib.h" TestStaticLib::TestStaticLib() { } void TestStaticLib::TestMyStaticLib() { qDebug() = 0x050000 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QGenericPluginFactoryInterface" FILE "plugindemo.json") // 使用Q_PLUGIN_METEDATA() 宏导出这个插件 #endif // QT_VERSION >= 0x050000 Q_INTERFACES(QtPluginDemoInterface) // 使用Q_INTERFACE() 宏告诉Qt元对象系统这个插件实现了哪些接口 public: explicit plugindemo(QObject *parent = nullptr); virtual void printMessage(const QString& message) override; }; #endif // PLUGINDEMO_Hcpp文件 // plugindemo.cpp #include "plugindemo.h" #include plugindemo::plugindemo(QObject *parent) : QObject(parent) { } void plugindemo::printMessage(const QString &message) { //在派生类中实现打印函数 qDebug() printMessage("hahahaha")); qDebug() printMessage("success"); } } delete obj; } else { qDebug() |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |